package br.com.imob.bo;

import java.util.ArrayList;

import java.util.List;

import javax.faces.component.UISelectOne;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;

import br.com.imob.bo.enums.local.Estados;
import br.com.imob.dao.EmpresaDao;
import br.com.imob.dao.EstadoDao;
import br.com.imob.modelo.Bairro;
import br.com.imob.modelo.Cidade;
import br.com.imob.modelo.Contato;
import br.com.imob.modelo.Empresa;
import br.com.imob.modelo.Endereco;
import br.com.imob.modelo.Estado;
import br.com.imob.modelo.Login;
import br.com.imob.modelo.Pais;

public class EmpresaBO {

	private Empresa empresa;
	private EmpresaDao edao;
	private Login login;
	private Endereco endereco;
	private Bairro bairro;
	private Cidade cidade;
	private Estado estado;
	private Contato contato;
	private List<Estado> states;
	private List<Cidade> cities;
	
	public EmpresaBO() {
		
		setStates(new ArrayList<Estado>());
		setCities(new ArrayList<Cidade>());
		
		setEdao(new EmpresaDao());
		setEmpresa(new Empresa());
		setContato(new Contato());
		setLogin(new Login());
		setEndereco(new Endereco());
		setBairro(new Bairro());
		setCidade(new Cidade());
		setEstado(new Estado());
	}

	/* Listas de Estados e Cidades */
	public List<Estado> getListEstados( ) {
		setStates( new EstadoDao().getEstados() );
		return getStates();
	}
	
	public void getEstadoSelected( AjaxBehaviorEvent event) {
		UISelectOne select = (UISelectOne) event.getSource();
		String valor = String.valueOf(select.getValue());
		
		setCities( new CidadeBO().getCidadesFlags( valor ) );
	}
	
	public List<Cidade> getListCidades() {
		return getCities();
	}
	
	
	
//	CRUD
	public void adicionarEmpresa( ActionEvent event ) {

		getEstado().setPais( new Pais(1, "Brasil") );
		
		for (int i = 0; i < getEstados().length; i++) {
			if( getEstados()[i].getEstado().equals( getEstado().getEstado() )  ) {
				getEstado().setEstadoId( getEstados()[i].getNumero() );
				getEstado().setUf( getEstados()[i].getSigla() );
			}
		}
		
		getCidade().setEstado( getEstado() );
		getBairro().setCidade( getCidade() );
		getEndereco().setBairro( getBairro() );
		getEmpresa().setEndereco( getEndereco() );

		getEmpresa().setLogin( getLogin() );
		getEmpresa().setContato1( getContato() );
		
		edao.adicionarEmpresa(getEmpresa());
	}
	
	public void removerEmpresa(  ) {
		edao.removerEmpresa(getEmpresa());
	}
	
	public void atualizarEmpresa(  ) {
		edao.atualizarEmpresa(getEmpresa());
	}
	
	public Empresa getEmpresaById(  ) {
		return edao.getEmpresa( getEmpresa().getEmpresaId() );
	}

	public List<Empresa> getAllEmpresas( ) {
		return edao.getEmpresas();
	}
//	Fim do CRUD
	
	
//	Arrays values of Enums
	public Estados[] getEstados( ) { return Estados.values(); }
	
	
	/*	Getts and Setts	*/
	public void setLogin(Login login) { this.login = login; }
	public Login getLogin() { return login; }

	public void setEndereco(Endereco endereco) { this.endereco = endereco; }
	public Endereco getEndereco() { return endereco; }

	public void setBairro(Bairro bairro) { this.bairro = bairro; }
	public Bairro getBairro() { return bairro; }
	
	public void setCidade(Cidade cidade) { this.cidade = cidade; }
	public Cidade getCidade() { return cidade; }

	public void setEstado(Estado estado) { this.estado = estado; }
	public Estado getEstado() { return estado; }

	public void setContato(Contato contato) { this.contato = contato; }
	public Contato getContato() { return contato; }

	public void setStates(List<Estado> estados) { this.states = estados; }
	public List<Estado> getStates() { return states; }

	public void setCities(List<Cidade> cities) { this.cities = cities; }
	public List<Cidade> getCities() { return cities; }

	public void setEmpresa(Empresa empresa) {this.empresa = empresa; }
	public Empresa getEmpresa() { return empresa; }

	public void setEdao(EmpresaDao edao) { this.edao = edao; }
	public EmpresaDao getEdao() { return edao; }
	
	
}